// 内部类：https://blog.csdn.net/qq_56776909/article/details/129564334

//

// 1. 静态内部类
class OuterClass {
    public int out_a = 10;
    public static int out_b = 20;

    void func1() {
        System.out.println(InnerClass.inner_a);     // 可以通过<类名.变量名>直接访问静态内部类中的静态成员；非静态成员还得通过创建内部类对象访问
    }

    static class InnerClass {
        static public int inner_a = 30;
        public void func() {
            System.out.println(out_b);    // 1. 可以直接访问外部类的非静态成员
            System.out.println(new OuterClass().out_a);     // 外部类的静态成员不能直接访问，想要访问必须实例化外部类对象
        }
    }
}


// 2. 实例内部类
class OuterClass2 {
    public int out2_a = 10;
    public static int out2_b = 20;

    void func1() {
        System.out.println(new InnerClass2().inner2_a);    // 外部类不能直接访问内部类中的成员，要访问必须先创建内部类对象
    }

    class InnerClass2 {
        int inner2_a = 30;
//        static int inner2_b = 40;      // 非静态内部类中不要有静态成员，但是JDK21这里竟然没出错，不知道为什么
        public void func() {
            System.out.println(out2_a);   // 外部类中的不管静态还是非静态，在内部类中都可以直接访问
            System.out.println(out2_b);
            System.out.println(inner2_a);
//            System.out.println(inner2_b);
        }
    }
}

public class class_9_neibulei {
    public static void main(String[] args) {
        OuterClass2 out2 = new OuterClass2();
        OuterClass2.InnerClass2 inner2 = out2.new InnerClass2();
        inner2.func();
    }
    public static void main1(String[] args) {
        // 静态内部类的实例化，不需要实例化外部类
        OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
        innerClass.func();
    }
}
